问题: 正则表达式中[]的作用是什么,举例说明?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
`[]` 在正则中称为字符类(或字符集),用于匹配方括号内定义的任意一个字符。其核心作用是将多个字符或字符范围组合为一个匹配单元,匹配时仅需满足其中之一即可。支持范围表示(如 `[a-z]` 匹配任意小写字母)、预定义字符类的组合(如 `[a-zA-Z0-9]` 匹配字母数字)以及取反(`[^]` 匹配除指定字符外的任意字符)。字符类内部大部分元字符失去特殊含义,仅 `^`(开头取反)、`-`(范围)和 `]`(结尾)需特殊处理。
---
基础用法示例
1 2 3 4 5 6 7 8 9 10 11
| import re text = "hello 123, world!"
print(re.findall(r'[0-9]', text))
print(re.findall(r'[a-zA-Z]', text))
print(re.findall(r'[aeiou]', text))
|
范围表示与特殊位置
| 写法 |
含义 |
注意 |
[0-9] |
匹配任一数字(等价于 \d) |
范围按 ASCII 码顺序 |
[a-z] |
匹配任一小写字母 |
不能写成 [z-a](错误顺序) |
[A-Za-z0-9_] |
匹配字母数字下划线(等价于 \w) |
可组合多段范围 |
[-az] |
匹配 -、a 或 z |
连字符在开头或结尾时表示字面量 |
[az-] |
匹配 a、z 或 - |
连字符在末尾同样表示字面量 |
取反操作 [^]
在字符类内部开头使用 ^ 表示取反,匹配除括号内字符外的任意字符。
1 2
| print(re.findall(r'[^0-9]', 'a1b2c3')) print(re.findall(r'[^aeiou]', 'hello'))
|
预定义字符类在 [] 中的使用
常见的 \d、\w、\s 可在字符类内部使用,代表其对应的字符集合。
| 写法 |
实际含义 |
等价于 |
[\d] |
匹配数字 |
[0-9] |
[\w] |
匹配字母数字下划线 |
[A-Za-z0-9_] |
[\s] |
匹配空白字符 |
[ \t\n\r\f\v] |
[^\s] |
匹配非空白字符 |
\S |
1
| print(re.findall(r'[\w-]+', 'user-name_123'))
|
字符类内部的元字符转义规则(陷阱提醒)
在 [] 内部,除 ^、-、] 和反斜杠 \ 外,大多数元字符(如 .、*、+、?、|、() 等)都失去特殊含义,无需转义,匹配其字面量。
- 要匹配
],需放在开头或转义:[]] 或 \]。
- 要匹配
^,不要放在开头(除非取反),如 [a^] 匹配 a 或 ^。
- 要匹配
-,放在开头或结尾,如 [-az] 或 [az-]。